WordPress-sivustoille, joille rekisteröityminen on avointa, tulee helposti paljon spämmirekisteröitymisiä. Ongelman ratkaisemiseen on erilaisia vaihtoehtoja. Itse ratkaisin sen Relevanssin sivuilla estämällä suorat rekisteröitymiset, sivustolle pääsee rekisteröitymään vain maksamalla lisenssin, mutta Lautapelioppaaseen piti keksiä jotain muuta. Päädyin yksinkertaiseen captcha-ratkaisuun:
Tämä yksinkertainen ratkaisu ajaa asian ja on blokannut spämmikäyttäjät sataprosenttisesti vaivaamatta liikaa oikeita käyttäjiä.
Koodipuolella tämä näyttää tältä:
<?php add_action( 'login_enqueue_scripts', 'lautapeliopas_logo' ); add_filter( 'login_headerurl', 'lautapeliopas_logo_url' ); add_filter( 'login_headertext', 'lautapeliopas_logo_title' ); add_filter( 'registration_errors', 'lautapeliopas_rekisterointi_tarkistus', 10, 3 ); add_action( 'register_form', 'lautapeliopas_reg_field' ); /** * Jos sanakentässä ei ole oikeaa sanaa, lisää virheilmoituksen. * Jos `registration_errors` palauttaa virheitä, rekisteröityminen * ei onnistu. */ function lautapeliopas_rekisterointi_tarkistus( $errors, $sanitized_user_login, $user_email ) { if ( strtolower( trim( $_POST['sana'] ) ) !== 'lautapeli' ) { $errors->add( 'lautapeli', '<strong>Huomio</strong>: kirjoita tekstikenttään <em>lautapeli</em>.' ); } return $errors; } /** * Lisätietoja rekisteröintikenttään. */ function lautapeliopas_reg_field() { $user_extra = ( isset( $_POST['sana'] ) ) ? $_POST['sana'] : ''; ?> <p> <label for="sana">Kirjoita tähän kenttään <em>lautapeli</em>:<br /> <input type="text" name="sana" id="sana" class="input" value="<?php echo esc_attr( stripslashes( $user_extra ) ); ?>" size="25" /></label> </p> <p>Rekisteröitymällä käyttäjäksi hyväksyt, että Lautapeliopas käsittelee henkilötietojasi (käyttäjätunnus ja sähköpostiosoite) <a href="/rekisteriseloste/">rekisteriselosteen</a> mukaisella tavalla. Lautapelioppaan käyttäjärekisteriin kirjataan nimi ja sähköpostiosoite. Tietoja ei luovuteta ulkopuolisille.</p> <?php } /** * Asettaa kirjautumissivun logoksi Lautapelioppaan logon. */ function lautapeliopas_logo() { ?> <style type="text/css"> #login h1 a, .login h1 a { background-image: url('/wp-content/uploads/2019/12/lautapeliopas-logo-240x180-1.png'); width:120px; height:90px; background-size: 120px 90px; background-repeat: no-repeat; padding-bottom: 30px; } </style> <?php } /** * Kirjautumissivun logon linkin URL. */ function lautapeliopas_logo_url() { return home_url(); } /** * Kirjautumissivun logon title-attribuutti. */ function lautapeliopas_logo_title() { return 'Lautapeliopas'; }
Koodi lisää tarkistuskentän ja huolehtii virheilmoituksista, jos sana on väärin. Lisäksi se lisää kirjautumissivulle CSS:ää, joka vaihtaa kirjautumissivulla oletuksena olevan WordPress-logon Lautapelioppaan logoksi, kääntää logossa olevan linkin osoittamaan WordPressin sivujen sijasta Lautapelioppaan etusivulle ja muuttaa logon title
-attribuutiksi ”Lautapeliopas”.
Tämä koodi on teemassa omassa tiedostossaan, joka on lisätty teeman functions.php
-tiedostoon require_once 'login.php';
.